package com.csx.base.concurrency.aqs.reentrantlock;

/**
 * <p> what does this class do ? </p>
 *  ReentrantLock 案例主要包含如下内容:
 *      1. 测试ReentrantLock加锁解锁源码的类,并在注释上写清楚ReentrantLock加锁解锁的流程
 *          ① ReentrantLock正常加锁的流程
 *          ② ReentrantLock无法获取锁后进入同步队列的流程
 *          ③ ReentrantLock解锁流程
 *      2. 公平锁和非公平锁的区别和底层实现差别
 *      3. 可打断的获取锁是如何实现的？
 *      4. 可超时中断获取锁是如何实现的？
 *      5. ReentrantLock中condition的await和signal流程
 *      6. ReentrantLock与synchronized的区别？什么时候选择ReentrantLock？什么时候选择synchronized?
 * <p> How does it work ?</p>
 * <p> Why does it do this ?</p>
 *
 * @author cuisongxu
 * @date 2024/12/2 周一 8:29
 */
public class Main {

    // 统一入口类，也可以在各个类中单独测试
    public static void main(String[] args) {
        ReentrantLockLockUnlockTest reentrantLockLockUnlockTest = new ReentrantLockLockUnlockTest();

//        reentrantLockLockUnlockTest.testNormalLock();

//        reentrantLockLockUnlockTest.testLockBlockQueue();

//        ReentrantLockFairUnfairLockTest reentrantLockFairUnfairLockTest = new ReentrantLockFairUnfairLockTest();
//        reentrantLockFairUnfairLockTest.test();


//        ReentrantLockInterruptLockTest reentrantLockInterruptLockTest = new ReentrantLockInterruptLockTest();
//        reentrantLockInterruptLockTest.test();

//        ReentrantLockTryLockTest reentrantLockTryLockTest = new ReentrantLockTryLockTest();
//        reentrantLockTryLockTest.test();

        ReentrantLockConditionTest reentrantLockConditionTest = new ReentrantLockConditionTest();
        reentrantLockConditionTest.test();

    }
}
